﻿using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Drawing;
using MemoryDuosRankings;

namespace MemoryDuosInterfaz.Tests
{
    [TestClass()]
    public class TableroTests
    {
        SeleccionNivel sel;
        Tablero tab;
        List<Bitmap> lista;
        Ranking rnk;

        [TestInitialize]
        public void Iniciar()
        {
            sel = new SeleccionNivel();
            sel.establecerGaleriaFutbol();
            lista = sel.crearListaImagenesPorTamanyo("COMPETICION");
            rnk = new Ranking(DateTime.Now, "Futbol", 3);
            tab = new Tablero(7, 6, lista, "asd", rnk);
        }
        [TestCleanup]
        public void Limpiar()
        {
            sel.Dispose();
        }
        [TestMethod]
        public void EsValido()
        {
            Assert.IsTrue(tab.esValido(3, 0));
            Assert.IsTrue(tab.esValido(3, 1));
            Assert.IsTrue(tab.esValido(3, 2));
            Assert.IsTrue(tab.esValido(0, 0));
        }

        [TestMethod]
        //[ExpectedException(typeof(System.ArgumentOutOfRangeException))]
        public void NoEsValido()
        {
            Assert.IsFalse(tab.esValido(14, 3));
            Assert.IsFalse(tab.esValido(5, 8));
            Assert.IsFalse(tab.esValido(50, 50));
        }

        [TestMethod]
        public void HayImagenesCompeticion()
        {
            var arraux = new Boolean[7, 6];
            for (int i = 0; i < arraux.GetLength(0); i++)
            {
                for (int j = 0; j < arraux.GetLength(1); j++)
                {
                    arraux[i, j] = true;
                }
            }
            CollectionAssert.AreEqual(arraux, tab.HayImagen);
        }

        [TestMethod]
        public void JugadaValida()
        {
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    var coord = new Coordenadas(i, j);
                    Assert.AreEqual(tab.GetImagen(coord).Equals(tab.GetImagen(coord)), tab.SonIguales(coord, coord));
                }
            }
        }

        [TestMethod]
        public void EsFinPartida()
        {
            Assert.IsFalse(tab.EsFinPartida());
            for (int i = 0; i < 7; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    var coord = new Coordenadas(i, j);
                    tab.SetEstado(coord, true);
                }
            }
            Assert.IsTrue(tab.EsFinPartida());
        }

        [TestMethod()]
        public void GetEstadoTest()
        {
            Assert.IsFalse(tab.GetEstado(new Coordenadas(0, 0)));
            tab.SetEstado(new Coordenadas(1, 1), true);
            Assert.IsTrue(tab.GetEstado(new Coordenadas(1, 1)));
            Assert.IsFalse(tab.GetEstado(new Coordenadas(50, 50)));
        }
    }
}
